পাসওয়ার্ড সিকিউরিটি হল একটি গুরুত্বপূর্ণ বিষয়, বিশেষ করে যখন ব্যবহারকারীর ডাটা সংরক্ষণ বা প্রক্রিয়া করা হয়। Password Hashing এবং Password Validation দুটি বিষয়ই পাসওয়ার্ড সিকিউরিটির জন্য অত্যন্ত গুরুত্বপূর্ণ। পাসওয়ার্ড হ্যাশিংয়ের মাধ্যমে পাসওয়ার্ডকে একভাবে পরিবর্তন করা হয় যাতে সে পুনরায় পড়া বা খোলার উপযুক্ত না থাকে। পাসওয়ার্ড ভ্যালিডেশনের মাধ্যমে ব্যবহারকারী যখন লগইন করে, তখন তার ইনপুট পাসওয়ার্ডটি ডাটাবেসে সংরক্ষিত হ্যাশের সাথে মিলিয়ে যাচাই করা হয়।
এখানে, আমরা পিএইচপি (PHP) দিয়ে পাসওয়ার্ড হ্যাশিং এবং ভ্যালিডেশন করার পদ্ধতি দেখব।
1. Password Hashing
Password Hashing হল পাসওয়ার্ডকে এমন একটি একমুখী (one-way) ফাংশনে পরিণত করার প্রক্রিয়া, যা সহজে বিপরীত (reverse) করা সম্ভব নয়। পিএইচপি-তে পাসওয়ার্ড হ্যাশ করার জন্য password_hash() ফাংশন ব্যবহার করা হয়। এটি পাসওয়ার্ডের একটি নিরাপদ হ্যাশ তৈরি করে, যেটি পরে ভ্যালিডেশন (validation) করার জন্য ব্যবহার করা যায়।
1.1 password_hash() ফাংশন ব্যবহার
$password = "user_password"; // ব্যবহারকারীর পাসওয়ার্ড
// পাসওয়ার্ড হ্যাশ করা
$hashed_password = password_hash($password, PASSWORD_DEFAULT);
// হ্যাশ করা পাসওয়ার্ড প্রিন্ট করা
echo $hashed_password;
PASSWORD_DEFAULT ফ্ল্যাগটি পিএইচপি-তে নিরাপদ হ্যাশিং এলগরিদম নির্বাচন করতে ব্যবহৃত হয়, যা সাধারণত bcrypt। এটি শক্তিশালী এবং ব্যবহারে সহজ। password_hash() ফাংশন পাসওয়ার্ডের একটি সল্ট (salt) তৈরি করে, যা হ্যাশের সঙ্গে মিশে যায়, ফলে হ্যাশগুলো পুনরাবৃত্তি হতে পারে না।
2. Password Validation
যখন ব্যবহারকারী লগইন করতে আসে, তখন পাসওয়ার্ডটি যাচাই করতে হয়। পাসওয়ার্ড ভ্যালিডেশন করতে password_verify() ফাংশন ব্যবহার করা হয়। এটি ডাটাবেসে সংরক্ষিত হ্যাশের সঙ্গে ব্যবহারকারীর ইনপুট পাসওয়ার্ডের মিল পরীক্ষা করে।
2.1 password_verify() ফাংশন ব্যবহার
$entered_password = "user_password"; // ব্যবহারকারীর ইনপুট পাসওয়ার্ড
$stored_hash = '$2y$10$W5qTUk5rZXJ...'; // ডাটাবেস থেকে নেওয়া হ্যাশ
// পাসওয়ার্ড যাচাই করা
if (password_verify($entered_password, $stored_hash)) {
echo "Password is correct.";
} else {
echo "Password is incorrect.";
}
এখানে, $stored_hash হলো ডাটাবেসে সংরক্ষিত হ্যাশ। ব্যবহারকারী যখন তার পাসওয়ার্ড ইনপুট দেয়, তখন password_verify() ফাংশন সেটিকে ডাটাবেসে সংরক্ষিত হ্যাশের সঙ্গে মিলিয়ে দেখে।
3. Password Hashing এবং Validation উদাহরণ
এখন একটি পূর্ণাঙ্গ উদাহরণ দেখি, যেখানে পাসওয়ার্ড হ্যাশিং এবং ভ্যালিডেশন দুটোই প্রদর্শিত হবে। এখানে ব্যবহারকারী নতুন পাসওয়ার্ড নিবে, সেই পাসওয়ার্ড হ্যাশ করা হবে এবং তারপর সেই হ্যাশ ডাটাবেসে সংরক্ষণ করা হবে। পরে, ব্যবহারকারী যখন লগইন করবে, তখন তার ইনপুট পাসওয়ার্ড ডাটাবেসে সংরক্ষিত হ্যাশের সাথে যাচাই করা হবে।
3.1 Registration (পাসওয়ার্ড হ্যাশিং এবং ডাটাবেসে সংরক্ষণ)
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db";
// ডাটাবেস সংযোগ
$conn = new mysqli($servername, $username, $password, $dbname);
// সংযোগ চেক করা
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// ইউজারের ইনপুট পাসওয়ার্ড
$user_password = $_POST['password'];
// পাসওয়ার্ড হ্যাশ করা
$hashed_password = password_hash($user_password, PASSWORD_DEFAULT);
// ডাটাবেসে পাসওয়ার্ড হ্যাশ সংরক্ষণ
$sql = "INSERT INTO users (username, password) VALUES ('$_POST[username]', '$hashed_password')";
if ($conn->query($sql) === TRUE) {
echo "New record created successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
$conn->close();
?>
3.2 Login (পাসওয়ার্ড ভ্যালিডেশন)
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "test_db";
// ডাটাবেস সংযোগ
$conn = new mysqli($servername, $username, $password, $dbname);
// সংযোগ চেক করা
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// ইউজারের ইনপুট পাসওয়ার্ড
$entered_password = $_POST['password'];
// ডাটাবেস থেকে পাসওয়ার্ড হ্যাশ নিয়ে আসা
$sql = "SELECT password FROM users WHERE username = '$_POST[username]'";
$result = $conn->query($sql);
$row = $result->fetch_assoc();
if ($row) {
$stored_hash = $row['password'];
// পাসওয়ার্ড যাচাই করা
if (password_verify($entered_password, $stored_hash)) {
echo "Login successful!";
} else {
echo "Invalid password!";
}
} else {
echo "No user found with that username!";
}
}
$conn->close();
?>
4. Best Practices for Password Hashing and Validation
- Always Use Strong Hashing Algorithms:
password_hash()ফাংশন bcrypt বা অন্যান্য নিরাপদ হ্যাশিং এলগরিদম ব্যবহার করে। কখনোই MD5 বা SHA-1 এর মতো দুর্বল এলগরিদম ব্যবহার করবেন না। - Use Salting:
password_hash()স্বয়ংক্রিয়ভাবে একটি সল্ট তৈরি করে, যা হ্যাশিং প্রক্রিয়ার অংশ। সল্টিং পাসওয়ার্ড হ্যাশিংকে আরও শক্তিশালী করে। - Use
password_verify()for Validation:password_verify()ফাংশন ব্যবহার করে পাসওয়ার্ড যাচাই করুন, এটি স্বয়ংক্রিয়ভাবে সল্ট এবং হ্যাশ মিলিয়ে থাকে। - Always Store Only Hashed Passwords: কখনোই পাসওয়ার্ড প্লেইন টেক্সট হিসাবে ডাটাবেসে সংরক্ষণ করবেন না। শুধু হ্যাশ করা পাসওয়ার্ড সংরক্ষণ করুন।
সারাংশ
Password Hashing এবং Password Validation পাসওয়ার্ড সিকিউরিটি নিশ্চিত করার জন্য অত্যন্ত গুরুত্বপূর্ণ। পিএইচপি-তে password_hash() এবং password_verify() ফাংশন ব্যবহার করে আপনি পাসওয়ার্ডের হ্যাশিং এবং ভ্যালিডেশন খুব সহজেই করতে পারেন। এটি আপনার সিস্টেমে নিরাপদ পাসওয়ার্ড স্টোরেজ এবং যাচাইয়ের প্রক্রিয়া নিশ্চিত করে।
Read more